package net.bbtang.website.utils.sms;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import com.aliyun.mns.client.CloudAccount;
import com.aliyun.mns.client.CloudTopic;
import com.aliyun.mns.client.MNSClient;
import com.aliyun.mns.common.ServiceException;
import com.aliyun.mns.model.BatchSmsAttributes;
import com.aliyun.mns.model.MessageAttributes;
import com.aliyun.mns.model.RawTopicMessage;
import com.aliyun.mns.model.TopicMessage;

public class AliSmsUtils {
	
	public static TopicMessage sendSms(AliSmsParams params){
		 /**
         * Step 1. 获取主题引用
         */
        CloudAccount account = new CloudAccount(params.getAccessId(),params.getAccessKey()
        		, params.getAccountEndpoint());
        MNSClient client = account.getMNSClient();
        CloudTopic topic = client.getTopicRef(params.getTopic());
        /**
         * Step 2. 设置SMS消息体（必须）
         *
         * 注：目前暂时不支持消息内容为空，需要指定消息内容，不为空即可。
         */
        RawTopicMessage msg = new RawTopicMessage();
        msg.setMessageBody("sms-message");
        /**
         * Step 3. 生成SMS消息属性
         */
        MessageAttributes messageAttributes = new MessageAttributes();
        BatchSmsAttributes batchSmsAttributes = new BatchSmsAttributes();
        // 3.1 设置发送短信的签名（SMSSignName）
        batchSmsAttributes.setFreeSignName(params.getSignName());
        // 3.2 设置发送短信使用的模板（SMSTempateCode）
        batchSmsAttributes.setTemplateCode(params.getTemplateCode());
        // 3.3 设置发送短信所使用的模板中参数对应的值（在短信模板中定义的，没有可以不用设置）
        BatchSmsAttributes.SmsReceiverParams smsReceiverParams = new BatchSmsAttributes.SmsReceiverParams();
        
        if (params.getTemplateParams() != null){
        	Iterator<Entry<String, String>> iter = params.getTemplateParams().entrySet().iterator();
        	while(iter.hasNext()) {
        		Entry<String,String> entry= iter.next();
        		smsReceiverParams.setParam(entry.getKey(),entry.getValue());
        	}
        }
        
        if(params.getPhoneNum() !=null){
        	for (String phoneNum : params.getPhoneNum()) {
        		batchSmsAttributes.addSmsReceiver(phoneNum, smsReceiverParams);
        	}
        }
        messageAttributes.setBatchSmsAttributes(batchSmsAttributes);
        TopicMessage ret = null;
        try {
            /**
             * Step 4. 发布SMS消息
             */
            ret = topic.publishMessage(msg, messageAttributes);
           
        } catch (ServiceException se) {
            se.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
        client.close();
        return ret;
	}
	
	
	public static void main(String[] args) {
		AliSmsParams params = new AliSmsParams();
		params.setAccessId("LTAIbZYdKAYfbZVr");
		params.setAccessKey("cJ31UrQfH97Sq9Yvxr6B1kJNNF8yLI");
		params.setAccountEndpoint("https://1282459339738101.mns.cn-hangzhou.aliyuncs.com/");
		params.setTopic("sms.topic-cn-hangzhou");
		params.setSignName("棒棒堂");
		params.setTemplateCode("SMS_62870164");
		
		params.setPhoneNum(new String[]{"15510833196"});
		Map<String,String> templateParams = new HashMap<String,String>();
		templateParams.put("token", "123456");
		params.setTemplateParams(templateParams);
		
		TopicMessage ret = AliSmsUtils.sendSms(params);
		System.out.println(ret);
	}
}
